<?php
/**
 * Author: Cy23 QQ:120428037 <cy23@vip.qq.com>
 * Date: 2023-10-27
 * Time: 10:28
 */
namespace addons\prune;

use think\Addons;
use think\Image;

/**
 * 截图插件
 * 注意名字不可以修改，只能为Plugin
 */
class Plugin extends Addons
{
    // 该插件的基础信息，系统优先获取info.ini中的配置信息
    public $info = [
        'name'        => 'prune',          // 插件标识
        'title'       => '在线截图',         // 插件名称
        'description' => '在线截取服务器图片，调整尺寸，返回到前端，会有一定的性能影响', // 插件简介
        'status'      => 0,                 // 状态[1 启用，0 禁用]
        'install'     => 0,                 // 是否已安装[1 已安装，0 未安装]
        'author'      => 'Cy23',            // 作者
        'version'     => '1.0',             // 版本
    ];

    // 插件的安装 [添加文件、执行sql等]
    public function install()
    {
        return true;
    }

    // 插件的卸载 [移除文件、执行sql等]
    public function uninstall()
    {
        return true;
    }

    /**
     * @param $param
     * @return string
     * @demo {:hook('prunehook', ['src'=> $public.'img/loading.png', 'w'=> 280, 'h'=> 210, 't'=>3])}
     */
    public function prunehook($param){
        // 获取图片地址、宽度、高度和裁剪区域参数

        if($param['src']){
            $src = $param['src'];
        } else {
            // 查找所有系统设置表数据
            $systeminfo = \app\common\model\System::find(1);

            $appName        = app('http')->getName();
            $system         = $systeminfo;
            $public         = '/template/' . $system['template'] . '/' . $appName . '/';
            $src = $public.'img/loading.png';
        }

        $w = intval($param['w']) ?: 125;
        $h = intval($param['h']) ?: 125;
        $t = intval($param['t']) ?: 1;

        /*
            $t的取值：
            1: 等比例缩放类型;
            2: 缩放后填充类型;
            3: 居中裁剪类型;
            4: 左上角裁剪类型;
            5: 右下角裁剪类型;
            6: 固定尺寸缩放类型;
        */
        // 分割文件名和扩展名
        $parts = pathinfo($src);
        // 获取文件名（无扩展名）
        $filename = $parts['filename'];
        // 获取扩展名
        $extension = $parts['extension'];

        // 创建新的文件名，添加宽高和裁剪参数
        $newFilename = "thumb_{$filename}_{$w}_{$h}_{$t}";
        // 重新组合路径
        $thumbPath =  $parts['dirname'] . '/' . $newFilename . '.' . $extension;
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($finfo, '.'.$src);

        // 加载原始图片
        try {
            if (file_exists('.' .$thumbPath)) {
//                header("Content-Type: {$mime_type}"); // 根据实际情况替换为正确的MIME类型
//                // 直接输出图片文件内容
//                readfile($thumbPath);
//                exit;
                return $thumbPath;
            } else {
                $image = Image::open('.'.$src);
                // 调整图片大小
                $image->thumb($w, $h, $t)->save('.' .$thumbPath);
                // 直接输出图片文件内容
//                readfile('.'.$thumbPath);
//                exit;
                return $thumbPath;
            }
        } catch (\Exception $e) {
//            dd($e);
            // 捕获 ImageException 异常并进行处理
            return '图片不存在';
        }
    }
}